from nevow.inevow import IRequest, IData, IRenderer, IRendererFactory
from nevow.context import WovenContext
from nevow.tags import invisible
from nevow.errors import MissingRenderMethod, MissingDocumentFactory
from nevow.util import Expose
from nevow.rend import _getPreprocessors
renderer = Expose('\n Allow one or more methods to be used to satisfy template render\n directives::\n\n | class Foo(Element):\n | def twiddle(self, request, tag):\n | return tag[\'Hello, world.\']\n | renderer(twiddle)\n\n | <div xmlns:nevow="http://nevow.com/ns/nevow/0.1">\n | <span nevow:render="twiddle" />\n | </div>\n\n Will result in this final output:\n\n | <div>\n | <span>Hello, world.</span>\n | </div>\n ')
class Element(object):
'''
An Element is an object responsible for rendering part or all of a page.
Elements provide a way to separate the responsibility for page rendering
into different units of code.
Elements implement L{IRendererFactory} to return render methods which are
registered using L{nevow.page.renderer}. For example::
class Menu(Element):
def items(self, request, tag):
....
renderer(items)
Render methods are invoked with two arguments: first, the
L{nevow.inevow.IRequest} being served and second, the tag object which
"invoked" the render method.
@ivar docFactory: The L{inevow.IDocFactory} which will be used during